ggplot2: Basics

ggplot2: Das Paket


ggplot2 gehört zum tidyverse

# install.packages("tidyverse")
library(tidyverse)


… kann aber natürlich auch seperat geladen werden:

# install.packages("ggplot2")
library(ggplot2)

Einen ggplot bauen

Komponenten

Daten



  x   y group size  shape
1 1 2.0     A    4 circle
2 2 3.0     A    5 circle
3 3 2.5     A    6 circle
4 4 4.0     A    7 circle
5 5 3.0     A    8 circle
6 2 1.0     B    3 circle

Aestetic mapping

Layers

Die Daten

Wir nutzen Daten von Gapminder.

Gapminder sammelt diverse Indikatoren aus allen Ländern weltweit, z.B. Lebenserwartung, GDP, CO2-Verbrauch und viele mehr.

Bekannt sind vor allem die Bubble-Plots.


Die Daten

Zuerst schauen wir uns nur eins der Jahre genauer an, und zwar nur für die Länder im Datensatz:

gapminder_dat <- gapminder_dat_full %>% 
  filter(time == "2020", !is.na(country)) 

Start: ggplot()

ggplot()

1. Daten

ggplot(data = gapminder_dat)

2. Aesthetic mapping




Verknüpfen von Spalten im Datensatz mit visuellen Eigenschaften:

mapping = aes()


Die wichtigsten Aestetics
Argument Aesthetic
x x-Achse
y y-Achse
color Farbe
fill Füllfarbe
shape Form
size Größe
alpha Transparenz
group Gruppe

Umfangreicherer Überblick über mögliche Aestethics.

Aesthetic mapping: Achsen

ggplot(
  data = gapminder_dat,
  mapping = aes(x = pop, y = co2_cons)
)

3. Geometric Layers




Verschiedene Layers (geoms) werden übereinandergelegt:

  geom_<layer1>() + 
  geom_<layer2>() + 
  ...


Die wichtigsten Layers
Argument Aesthetic
geom_point() Punkte
geom_line() Linien
geom_histogram() Histogramm
geom_text() Text
geom_boxplot() Boxplot

Umfangreicherer Überblick über mögliche Geoms.

Layers: Punkte

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons
  )
) +
  geom_point()

Übung 1

Jetzt wisst ihr genug, um einen ersten eigenen Plot zu erstellen.

  • Beschreiben, was erstellt werden soll. Vielleicht ein anderer Plottyp? Oder eine andere Variable?

Mehr Aesthetics!

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons, 
    color = world_6region
  )
) +
  geom_point() 

Mehr Layers!

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons, 
    color = world_6region
  )
) +
  geom_jitter() 

Mehr Layers!

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons, 
    color = world_6region
  )
) +
  geom_jitter(height = 500) 

Mehr Layers!

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons, 
    color = world_6region
  )
) +
  geom_hex() 

Mehr Layers!

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons, 
    color = world_6region
  )
) +
  geom_point() +
  geom_smooth()

Übung 2

Probiert aus, wo in den ggplot-layers man die Farbe Ändern kann (es gibt 3 verschiedene Möglichkeiten, die sich alle unterschiedlich auf den Plot auswirken). Ziel: Nur die Punkte sollen farbig sein. Es soll dann nur eine geom-smooth für den gesamten Trend geben.

Aestetics als Mapping oder Setting

Für alle Layer

ggplot(
  data = gapminder_dat,
  aes(
    x = pop,
    y = co2_cons,
    color = world_6region
  )
) +
  geom_point() +
  geom_smooth()

Für spezifische Layer

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons
  )
) +
  geom_point(aes(color = world_6region)) +
  geom_smooth()

Als Setting

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons
  )
) +
  geom_point(color = "#F4BA02") +
  geom_smooth()

Labels

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons
  )
) +
  geom_point() +
  geom_smooth() +
  labs(
    title = "Größere Bevölkerung führt zu mehr CO2-Ausstoß!",
    subtitle = "CO2-Ausstoß diverser Länder in 2020",
    x = "Bevölkerungzahl",
    y = "CO2-Ausstoß in Tonnen"
  )

Style deinen Plot: Themes

ggplot(
  data = gapminder_dat,
  mapping = aes(
    x = pop,
    y = co2_cons
  )
) +
  geom_point() +
  geom_smooth() +
  labs(
    title = "Größere Bevölkerung führt zu mehr CO2-Ausstoß!",
    subtitle = "CO2-Ausstoß diverser Länder in 2020",
    x = "Bevölkerungzahl",
    y = "CO2-Ausstoß in Tonnen"
  ) +
  theme_classic()